<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <title>基于vue-router的案例</title>
    <style type="text/css">
      html,
      body,
      #app {
        margin: 0;
        padding: 0px;
        height: 100%;
      }
      .header {
        height: 50px;
        background-color: #545c64;
        line-height: 50px;
        text-align: center;
        font-size: 24px;
        color: #fff;
      }
      .footer {
        height: 40px;
        line-height: 40px;
        background-color: #888;
        position: absolute;
        bottom: 0;
        width: 100%;
        text-align: center;
        color: #fff;
      }
      .main {
        display: flex;
        position: absolute;
        top: 50px;
        bottom: 40px;
        width: 100%;
      }
      .content {
        flex: 1;
        text-align: center;
        height: 100%;
      }
      .left {
        flex: 0 0 20%;
        background-color: #545c64;
      }
      .left a {
        color: white;
        text-decoration: none;
      }
      .right {
        margin: 5px;
      }
      .btns {
        width: 100%;
        height: 35px;
        line-height: 35px;
        background-color: #f5f5f5;
        text-align: left;
        padding-left: 10px;
        box-sizing: border-box;
      }
      button {
        height: 30px;
        background-color: #ecf5ff;
        border: 1px solid lightskyblue;
        font-size: 12px;
        padding: 0 20px;
      }
      .main-content {
        margin-top: 10px;
      }
      ul {
        margin: 0;
        padding: 0;
        list-style: none;
      }
      ul li {
        height: 45px;
        line-height: 45px;
        background-color: #a0a0a0;
        color: #fff;
        cursor: pointer;
        border-bottom: 1px solid #fff;
      }

      table {
        width: 100%;
        border-collapse: collapse;
      }

      td,
      th {
        border: 1px solid #eee;
        line-height: 35px;
        font-size: 12px;
      }

      th {
        background-color: #ddd;
      }

      .router-link-active {
          display: block;
          background-color: yellowgreen;
          color: red!important;
      }
      .nav-login {
          float: right;
          color: #fff;
          padding: 0 10px;
          text-decoration: none;
      }
    </style>
    <script src="../js/vue.js"></script>
    <script src="../js/vue-router_3.0.2.js"></script>
  </head>
  <body>
    <!-- 要被 vue 实例所控制的区域 -->
    <div id="app">
        <router-view></router-view>
    </div>

    <script>
        // 定义 APP 根组件
        const App = {
        template: `<div>
            <!-- 头部区域 -->
            <header class="header">
                <div>传智后台管理系统
                    <router-link to="/login" class="nav-login" @click.prevent="btnLogin">登录</router-link>
                    <router-link to="/register" class="nav-login" @click.prevent="btnRegister">注册</router-link>
                </div>
            </header>
            <!-- 中间主体区域 -->
            <div class="main">
                <!-- 左侧菜单栏 -->
                <div class="content left">
                    <ul>
                        <li>
                            <router-link to="/users">用户管理</router-link>
                        </li>
                        <li>
                            <router-link to="/rights">权限管理</router-link>
                        </li>
                        <li>
                            <router-link to="/goods">商品管理</router-link>
                        </li>
                        <li>
                            <router-link to="/orders">订单管理</router-link>
                        </li>
                        <li>
                            <router-link to="/settings">系统设置</router-link>
                        </li>
                    </ul>
                </div>
                <!-- 右侧内容区域 -->
                <div class="content right">
                    <div class="main-content">
                        <router-view />
                    </div>
                </div>
            </div>
            <!-- 尾部区域 -->
            <footer class="footer">版权信息</footer>
        </div>`,
          methods: {
            btnLogin() {
              this.$router.push('/login')
            },
            btnRegister() {
              this.$router.push('/register')
            }
          }
        }

        const Users = {
            data() {
                return {
                    userlist: [
                        {id:1,name:'初音',gender:'女'},
                        {id:2,name:'佐助',gender:'男'},
                        {id:3,name:'路飞',gender:'男'},
                        {id:4,name:'灵梦',gender:'女'}
                    ]
                }
            },
            template: `<div>
                <h1>用户管理页面</h1>
                <table> 
                  <thead>
                    <tr>
                      <th>编号</th><th>姓名</th><th>性别</th><th>操作</th>
                    </tr>
                  </thead>
                  <tbody>
                    <tr v-for="item in userlist" :key="item.id">
                      <td>{{item.id}}</td>
                      <td>{{item.name}}</td>
                      <td>{{item.gender}}</td>
                      <td>
                        <a href="javascript:;" @click.prevent="clk(item.id)">详情</a>
                      </td>
                    </tr>
                  </tbody>
                </table> 
            </div>`,
            methods: {
              clk(id) {
                let obj = null;
                this.userlist.some(item => {
                  if(item.id == id) {
                    obj = item;
                    return true;
                  }
                })
                console.log(this.$router,1111,this.$router);
                this.$router.push({path:`/users/userinfo/${id}`,query:{obj}})
              }
            }
        }
        const Rights = {
            template: `<div>
                <h1>权限管理页面</h1>
            </div>`
        }
        const Goods = {
            template: `<div>
                <h1>商品管理页面</h1>
            </div>`
        }
        const Orders = {
            template: `<div>
                <h1>订单管理页面</h1>
            </div>`
        }
        const Settings = {
            template: `<div>
                <h1>系统设置页面</h1>
            </div>`
        }
        const Userinfo = {
          props: ['id','obj'],
          template: `<div>
                <h1>传递参数===id:{{id}}==={{obj.name}}==={{obj.gender}}</h1>
            </div>`
        }
        const Login ={
            template: `<div>
                  <h1>登录页面</h1>
              </div>`
        }
        const Register ={
            template: `<div>
                  <h1>注册页面</h1>
              </div>`
        }

        // 创建路由模块
        const router = new VueRouter({
            routes: [
                {path: '/',component:App,children:[
                    {path:'/users',component:Users},
                    {path:'/users/userinfo/:id',component:Userinfo,props: route => ({id:route.params.id,obj:route.query.obj})},
                    {path:'/rights',component:Rights},
                    {path:'/goods',component:Goods},
                    {path:'/orders',component:Orders},
                    {path:'/settings',component:Settings}
                ]},
                {path:'/login',component:Login},
                {path:'/register',component:Register}
            ]
        })

      // 使用全局前置守卫，拦截异常请求
      router.beforeEach((to,from,next) => {
        let isLogin = localStorage.getItem('userInfo');
        if(isLogin) {
          next();
        }else if(to.path === '/login'){
          next();
        }else {
          next('./login');
        }
      })

      const vm = new Vue({
        el: '#app',
        router
      })
    </script>
  </body>
</html>
